//Copyright (c) 2009, Sandeep Datta
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are permitted provided 
//that the following conditions are met:
//
//* Redistributions of source code must retain the above copyright notice, this list of conditions and 
//the following disclaimer.
//
//* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and 
//the following disclaimer in the documentation and/or other materials provided with the distribution.
//
//* Neither the name of Sandeep Datta nor the names of its contributors may be used to endorse or 
//promote products derived from this software without specific prior written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR 
//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
//CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
//CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
//WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
//OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

using System;
using System.Collections.Generic;
using System.Text;
using WindowsInstaller;
using System.Reflection;
using System.Runtime.InteropServices;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


namespace SharpInstall
{
    class Program
    {
        private static List<TableInfo> _tables = new List<TableInfo>();

        static void Main(string[] args)
        {
            //string[] _args = args;
            string[] _args = new string[] { "generated.msi" };

            //LoadTables(@"..\..\..\Data\Schema.Msi");
            //SaveTables(@"..\..\Resources\Schema.bin");

            Msi msi = new Msi(_args[0], FileMode.CreateNew);
            TableInfo ti = TableInfo.GetTableInfo(TableType.AdvtExecuteSequence);
            msi.AddTable(ti);

            
        }

        public static void LoadTables(string baseFolder)
        {
            foreach (FileInfo file in new DirectoryInfo(baseFolder).GetFiles("*.idt"))
            {
                TableInfo ti = ArchiveFileProcessor.GetTableInfoFromFile(file.FullName);
                _tables.Add(ti);
            }
        }

        public static void SaveTables(string path)
        {
            BinaryFormatter serializer = new BinaryFormatter();
            using(FileStream fs = File.OpenWrite(path))
            {
                serializer.Serialize(fs, _tables);
            }
        }
    }
}